package Jedis;
/*
 * Jedis: 一款java操作redis数据库的工具
 * 使用步骤 :
     1. 下载jedis的jar包
        jedis-2.7.0.jar 和 commons-pool2-


   * Jedis操作各种redis中的数据结构
         1.  字符串类型  String
            set
            get
         2.  哈希类型  hash  :  map格式
             hset
             hget
         3.  列表类型  list  :   linkedlist格式.支持重复元素
             lpush/rpush
             lpop/rpop
         4.  集合类型   set  :  不允许重复元素
              sadd
              smembers :获取所有元素
         5.  有序集合类型  sortedset  :  不允许重复元素,且元素有顺序
              zadd


*/

import Jedis.util.JedisPoolUtils;
import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

import java.util.List;
import java.util.Map;
import java.util.Set;

/*
 Jedis的测试类
*/
public class JedisTest {
    /*
     快速入门
    */
    @Test
    public void test1(){
        //1.获取连接
        Jedis aa=new Jedis("localhost",6379);
        //2. 操作
        aa.set("username","zhansgan");
        //3.关闭连接
        aa.close();
    }


    //String数据类型
    @Test
    public void test2(){
        //1.获取连接
        Jedis aa=new Jedis();//如果这里为空参,则默认值为localhost,6379端口
        //2. 操作
        aa.set("username","zhansgan");
        //获取
        String bb = aa.get("username");
        System.out.println(bb);

        //可以使用setex()方法存储可以指定过期时间的 key value
        aa.setex("haha",20,"heh");//将haha-hehe键值对存入redis并且20秒后自动删除

        //3.关闭连接
        aa.close();
    }


    //hash数据类型
    @Test
    public void test3(){
        //1.获取连接
        Jedis aa=new Jedis();//如果这里为空参,则默认值为localhost,6379端口
       //2.操作
        //存储hash
        aa.hset("user","name","lisi");
        aa.hset("user","age","18");
        aa.hset("user","gender" ,"male");
        //获取hash
        String bb = aa.hget("user", "name");
        System.out.println(bb);

        //获取hash中所有的map数据
        Map<String, String> cc = aa.hgetAll("user");
        Set<String> dd = cc.keySet();
        for (String s : dd) {
            String ee = cc.get(s);
            System.out.println(s+":"+ee);
        }
        //3.关闭连接
        aa.close();
    }

     //list数据操作
    @Test
    public void test4(){
        //1.获取连接
        Jedis aa=new Jedis("localhost",6379);
        //2. 操作  存储
        aa.lpush("mylist","a","b","c");
        aa.rpush("mylist","a","b","c");

        //list的范围获取
        List<String> bb = aa.lrange("mylist", 0, -1);
        System.out.println(bb);
          // 弹出
        String cc = aa.lpop("mylist");//c
        System.out.println(cc);

        //3.关闭连接
        aa.close();
    }

    //set数据类型
    @Test
    public void test5(){
        //1.获取连接
        Jedis aa=new Jedis("localhost",6379);
        //2. 操作  存储
       aa.sadd("mylist","java","php","c++");
       //获取
        Set<String> cc = aa.smembers("mylist");
        System.out.println(cc);
        //3.关闭连接
        aa.close();
    }


    //Jedis的连接池的使用
    @Test
    public void test6(){
        //0.创建一个配置对象
        JedisPoolConfig cc=new JedisPoolConfig();
        cc.setMaxTotal(50); //最大允许连接数
        cc.setMaxIdle(10);//最大的空闲连接数
        //1.创建Jedis连接池对象
        JedisPool aa=new JedisPool(cc,"localhost",6379);
        //2.获取lianjie
        Jedis bb= aa.getResource();
        //3.使用
        bb.set("hehe","haha");
        //4.关闭   归还到连接池中
        bb.close();
    }

    //Jedis的连接池工具类的使用
    @Test
    public void test7(){
    //提供连接池工具类获取
        Jedis aa = JedisPoolUtils.getJedis();
        //使用
        aa.set("hello","world");
        //关闭  归还到连接池中
        aa.close();

    }

}
